<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>事件冒泡或事件捕获？</title>
    <style>
        div {
            background-color: coral;
            border: 1px solid;
            padding: 50px;
        }
    </style>
</head>

<body>
    <!-- 事件传递有两种方式：冒泡与捕获。
事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中，用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢？
在 冒泡 中，内部元素的事件会先被触发，然后再触发外部元素，即： <p> 元素的点击事件先触发，然后会触发 <div> 元素的点击事件。
在 捕获 中，外部元素的事件会先被触发，然后才会触发内部元素的事件，即： <div> 元素的点击事件先触发 ，然后再触发 <p> 元素的点击事件。

addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型：
addEventListener(event, function, useCapture);
默认值为 false, 即冒泡传递，当值为 true 时, 事件使用捕获传递。 -->
    <p>实例演示了在添加不同事件监听时，冒泡与捕获的不同。</p>
    <div id="myDiv">
        <p id="myP">点击段落，我是冒泡。</p>
    </div><br>
    <div id="myDiv2">
        <p id="myP2">点击段落，我是捕获。 </p>
    </div>
    <script>
        document.getElementById("myP").addEventListener("click", function () {
            alert("你点击了 P 元素!");
        }, false);
        document.getElementById("myDiv").addEventListener("click", function () {
            alert(" 你点击了 DIV 元素 !");
        }, false);
        document.getElementById("myP2").addEventListener("click", function () {
            alert("你点击了 P2 元素!");
        }, true);
        document.getElementById("myDiv2").addEventListener("click", function () {
            alert("你点击了 DIV2 元素 !");
        }, true);
    </script>
</body>

</html>